//import java.util.List;
//import java.util.PriorityQueue;
//
//class MyTimerTask implements Comparable<MyTimerTask>{
//    private Runnable task;
//    private long time;//要执行的时间,当前时间加上等待时间
//
//    public MyTimerTask(Runnable task, long time) {
//        this.task = task;
//        this.time = time;
//    }
//
//    @Override
//    public int compareTo(MyTimerTask myTimerTask) {
//        return (int)(this.time - myTimerTask.time);
//    }
//
//    public long getTime() {
//        return time;
//    }
//
//    public void run() {
//        task.run();
//    }
//}
//
//class MyTimer {
//    private PriorityQueue<MyTimerTask> queue = new PriorityQueue<>();
//
//    private Object locker = new Object();
//
//    public void schedule(Runnable task, long time) {
//        synchronized (locker) {
//            MyTimerTask timerTask = new MyTimerTask(task, System.currentTimeMillis() + time);
//            queue.offer(timerTask);
//            locker.notify();
//        }
//    }
//
//    public MyTimer() {
//        Thread thread = new Thread(() -> {
//            synchronized (locker) {
//                while (true) {
//                    while (queue.isEmpty()) {
//                        try {
//                            locker.wait();
//                        } catch (InterruptedException e) {
//                            throw new RuntimeException(e);
//                        }
//                    }
//                    MyTimerTask timerTask = queue.peek();
//                    if (System.currentTimeMillis() < timerTask.getTime()) {
//                        try {
//                            locker.wait(timerTask.getTime() - System.currentTimeMillis());
//                        } catch (InterruptedException e) {
//                            throw new RuntimeException(e);
//                        }
//                    } else {
//                        timerTask.run();
//                        queue.poll();
//                    }
//                }
//            }
//        });
//        thread.start();
//    }
//}
//
//public class Demo2 {
//    public static void main(String[] args) {
//        MyTimer myTimer = new MyTimer();
//
//        myTimer.schedule(new Runnable() {
//            @Override
//            public void run() {
//                System.out.println(3000);
//            }
//        }, 3000);
//
//        myTimer.schedule(new Runnable() {
//            @Override
//            public void run() {
//                System.out.println(2000);
//            }
//        }, 2000);
//
//        myTimer.schedule(new Runnable() {
//            @Override
//            public void run() {
//                System.out.println(1000);
//            }
//        }, 1000);
//
//        System.out.println("main");
//    }
//}
//
